home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Skunkware 5
/
Skunkware 5.iso
/
src
/
Games
/
flying-6.11
/
bugs.h
< prev
next >
Wrap
C/C++ Source or Header
|
1995-06-29
|
4KB
|
125 lines
#ifdef _bugs_h
Gefundene Fehler und Besonderheiten bei verschiedenen Compilern
BORLANDC
========
- RealZero als Define (aus real.h) fⁿhrt wΣhrend der ▄bersetzung von Vec3.C
zum Absturz des Compilers.
=> Statt Define mu▀ Real-Konstante verwendet werden.
- Es gibt Schwierigkeiten bei der Typdeklaration folgender
(klassenspezifischer) Typen der Klassen Object und DynObj wegen
der gleichen Namen.
typedef void (Object::*ObjFun)();
typedef void (DynObj::*ObjFun)();
=> Unterscheidung durch eindeutige Namen DynObj::*ObjFun -> DynObj::*DynObjFun
- Die Kombination friend inline fⁿhrt in vec2.h und vec3.h zu Problemen.
=> Da Alternativen von gcc angemeckert werden, wird eine Unterscheidung
ⁿber Schalter eingebaut.
TURBOC
======
- findet Fehler in DOSPBALL.H. Im Konstruktor fehlte die Initialisierung der
display-Variable. -> eigentlich Fehler von BORLANDC
HP-CC
=====
- kann Real als Klasse (Schalter REAL_IS_CLASS in global.h) nicht ⁿbersetzen,
da bei einigen Operatoren scheinbar Mehrdeutigkeiten auftreten. Die
Mehrdeutigkeit entsteht bei Verwendung von Real und Integers in einem
Ausdruck, da der Compiler dann nicht mehr zwischen Real/Real- und
double/double-Operator entscheiden kann.
=> alle (absolut alle!) Kombinationen von Real- und int-Typen in Ausdruecken
muessen explizit den int in einen Real casten !
- purify meldet beim Matrizentest-Programm folgende Meldung:
| **** Purify'd check (pid 29719) ****
| Purify (umr): uninitialized memory read:
| * This is occurring while in:
| operator/(const Vector&,const Matrix&) [line 211, matrix.C, pc=0x28f44]
| main [line 26, matrix_x.C, pc=0x2d6d8]
| _start [libc.sl, pc=0x817ef04c]
| $START$ [check, pc=0x5740]
| * Reading 4 bytes from 0x7b033630 on stack (2 bytes at 0x7b033632 uninit).
| * This is local variable "x" in function main.
|
| Chunks Bytes
| Leaked 0 0
| Potentially Leaked 0 0
| In-Use 7 4064
| ----------------------------------------
| Total Allocated 7 4064
|
=> ignorieren
GNU-CC
======
- Version 2.5.7 kann in der double-Version von Real den impliziten Cast von
Integer-Konstanten nach const Real& nicht korrekt durchfⁿhren.
der Fehler fⁿhrt zum Laufzeitabsturz !!!
=> Alle Integer-Konstanten, die als Real verwendet werden, mⁿssen vorsorglich
explizit als double in der Source auftauchen.
- In xmover.C gibt es Schwierigkeiten bei der Macro-Ersetzung von
YADDOP zu + in der Zeile c YADDOP= dy_c (also: c += dy_c)
=> c YADDOP dy_c verwenden und direkt += zuordnen
- Version 2.6.0 hat Probleme mit dem Default-Copy-Konstruktor der
Carrom-Klasse. Der Fehler tritt bei gleichzeitiger Verwendung eines
mehrdimensionalen Arrays und eines einzelnen Objekts (im Beispiel Vec2)
auf
=> Copy-Konstruktor wird explizit als dummy definiert
- Real (*this) wird als konstant angenommen in
inline Real Real::operator*( const Real &z ) const
{ return (*this)*=z; }
=> Konstrukt variiert:
inline Real Real::operator*( const Real &z ) const
{ Real erg(*this); erg*=z; return erg; }
- Version 2.4 hat Probleme mit dem protected member id der Klasse Object.
Die public abgeleitete Klasse goal kann darauf nicht zugreifen.
=> id wird zum public member gemacht.
allgemein
=========
- Vector( int n, double, ... ); funktioniert nicht
=> ausgetauscht in Vector( int n, double d ), analog fuer Matrizen
#endif